package com.datastruct_leecode.leetcode;

/**
 * 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图，计算按此排列的柱子，下雨之后能接多少雨水。
 *
 *
 *
 * 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图，在这种情况下，可以接 6 个单位的雨水（蓝色部分表示雨水）。 感谢 Marcos 贡献此图。
 *
 * 示例:
 *
 * 输入: [0,1,0,2,1,0,1,3,2,1,2,1]
 * 输出: 6
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/trapping-rain-water
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class ques_42 {

    public static int trap(int[] height) {

        int leftindex = 0;
        int rightindex = height.length - 1;
        int leftmax = 0;
        int rightmax = 0;
        int capcity = 0;//容量
        while(rightindex > leftindex){//右边循环大于左边循环，边界条件
            if(height[rightindex] > height[leftindex]){//右边柱子大，左滑
                if(leftmax <= height[leftindex]) leftmax=height[leftindex];
                else capcity += (leftmax - height[leftindex]);
                ++leftindex;
            }else{//左边柱子大，右滑
                if(height[rightindex]>=rightmax) rightmax = height[rightindex];
                else capcity += (rightmax - height[rightindex]);
                --rightindex;
            }
        }

        return capcity;
    }

    public static void main(String[] args) {
        int[] hegint = new int[]{4,2,3};
        System.out.println(trap(hegint));
    }
}
